home *** CD-ROM | disk | FTP | other *** search
- #include "..\Source\LastWolf.hpp"
-
-
- int mike_new_handler( size_t t );
- void OnExit();
-
- extern Fixed topY, bottomY;
-
-
- void main(int argc, char *argv[])
- {
- BspCommandLine commandLine;
-
- WORD sizeSpeed = 4;
- WORD moveSpeed = 15;
-
- char screenMessage[256];
-
- WORD frames=0;
- BOOL bMessageOn=TRUE, bFrontAndBack = FALSE;
-
- WORD allTextureLength = 64;
- WORD i;
-
- #ifdef DOS
- // Stuff for the mouse.
- WORD mouseX, mouseY;
- WORD lastX=0, lastY=0;
- BOOL bButton1, bButton2;
-
- lastX = 320;
- lastY = 200/2;
-
- m_SetMousePos( 320, 200/2 );
- #endif
-
- _set_new_handler( mike_new_handler );
- atexit( OnExit );
-
- curLevel.pLines = new CLineArray;
- curLevel.pPoints = new CPointArray;
-
- player.xPos=0;
- player.yPos=0;
- player.facingAngle=0;
-
- bBlackAndWhite=FALSE;
-
- ProcessCommandLine( argc, argv, &commandLine );
-
- curLevel.pRootLine = GenerateBspTree( &commandLine, curLevel.pLines, curLevel.pPoints );
- if( curLevel.pRootLine == NULL )
- {
- printf("\a");
- return;
- }
-
-
- s_Init();
- s_MinX = 0;
- s_MaxX = s_Width;
- s_MinY = 0;
- s_MaxY = s_Height;
- s_DrawWidth = s_Width;
- s_DrawHeight = s_Height;
-
- dr_InitTables();
- dr_GenerateLookups();
-
- #ifdef DOS
- #ifndef PALETTE_MAPS
- if( commandLine.bLoadDoomTextures )
- s_SetPalette( curLevel.palette );
- #endif
- #endif
-
- t_StartTimer();
-
- // Keep looping and drawing...
- while(1)
- {
- if( kbhit() )
- {
- switch( toupper(getch()) )
- {
- case '?':
- bFrontAndBack = !bFrontAndBack;
- s_Clear(0);
- s_Draw();
- s_Clear(0);
- s_Draw();
- break;
-
- case '/':
- if( curLevel.idCurSky == curLevel.idSky1 )
- curLevel.idCurSky = curLevel.idSky2;
- else if( curLevel.idCurSky == curLevel.idSky2 )
- curLevel.idCurSky = curLevel.idSky3;
- else if( curLevel.idCurSky == curLevel.idSky3 )
- curLevel.idCurSky = curLevel.idSky1;
- break;
-
- case '0':
- ResetVideoMode(0);
- dr_GenerateLookups();
- break;
-
- case '1':
- ResetVideoMode(1);
- dr_GenerateLookups();
- break;
-
- case '2':
- ResetVideoMode(2);
- dr_GenerateLookups();
- break;
-
- case '3':
- ResetVideoMode(3);
- dr_GenerateLookups();
- break;
-
- case '4':
- ResetVideoMode(4);
- dr_GenerateLookups();
- break;
-
- case 'T':
- // Reset the fps calculations.
- timeCount=0;
- frames=0;
- break;
-
- case 'Z':
- allTextureLength -= 3;
- for( i=0; i < curLevel.pLines->NumElements(); i++ )
- curLevel.pLines->GetLine(i)->SetTextureXLength(allTextureLength);
- break;
-
- case 'X':
- allTextureLength += 3;
- for( i=0; i < curLevel.pLines->NumElements(); i++ )
- curLevel.pLines->GetLine(i)->SetTextureXLength(allTextureLength);
- break;
-
- case 'M':
- bMessageOn = !bMessageOn;
- break;
-
- case '-':
- if( s_MinX != (s_Width/2)-50 )
- {
- s_MinX += sizeSpeed;
- s_MaxX -= sizeSpeed;
- s_MinY += sizeSpeed;
- s_MaxY -= sizeSpeed;
-
- s_DrawWidth = s_MaxX - s_MinX;
- s_DrawHeight = s_MaxY - s_MinY;
-
- s_Clear(0);
- s_Draw();
- s_Clear(0);
- s_Draw();
-
- dr_GenerateLookups();
- }
- break;
-
- case '+':
- if( s_MaxX != s_Width )
- {
- s_MinX -= sizeSpeed;
- s_MaxX += sizeSpeed;
- s_MinY -= sizeSpeed;
- s_MaxY += sizeSpeed;
-
- s_DrawWidth = s_MaxX - s_MinX;
- s_DrawHeight = s_MaxY - s_MinY;
-
- s_Clear(0);
- s_Draw();
- s_Clear(0);
- s_Draw();
-
- dr_GenerateLookups();
- }
- break;
-
- case 'V':
- break;
-
- case ';':
- zFadeOut -= 10;
- if( zFadeOut < 10 )
- zFadeOut = 10;
- break;
-
- case ''':
- zFadeOut += 10;
- break;
-
- case '[':
- ++parallaxMap;
- if( parallaxMap == (nPaletteMaps-1) )
- parallaxMap = 0;
- break;
-
- case ']':
- --parallaxMap;
- if( parallaxMap == 0 )
- parallaxMap = nPaletteMaps-2;
- break;
-
- case 'U':
- topY += FIXED_ONE;
- bottomY += FIXED_ONE;
- break;
-
- case 'I':
- topY -= FIXED_ONE;
- bottomY -= FIXED_ONE;
- break;
-
- case 'H':
- topY += FIXED_ONE;
- break;
-
- case 'J':
- topY -= FIXED_ONE;
- break;
-
- case 'A':
- player.xPos -= W_UNFIX(SAFE_SIN(player.facingAngle + HALF_PI) * moveSpeed);
- player.yPos -= W_UNFIX(SAFE_COS(player.facingAngle + HALF_PI) * moveSpeed);
-
- #ifndef DOS
- printf("Moving left.\n");
- #endif
-
- break;
-
- case 'S':
- player.xPos -= W_UNFIX(SAFE_SIN(player.facingAngle) * moveSpeed);
- player.yPos -= W_UNFIX(SAFE_COS(player.facingAngle) * moveSpeed);
-
- #ifndef DOS
- printf("Moving back.\n");
- #endif
-
- break;
-
- case 'D':
- player.xPos -= W_UNFIX(SAFE_SIN(player.facingAngle - HALF_PI) * moveSpeed);
- player.yPos -= W_UNFIX(SAFE_COS(player.facingAngle - HALF_PI) * moveSpeed);
-
- #ifndef DOS
- printf("Moving right.\n");
- #endif
-
- break;
-
- case 'W':
- player.xPos += W_UNFIX(SAFE_SIN(player.facingAngle) * moveSpeed);
- player.yPos += W_UNFIX(SAFE_COS(player.facingAngle) * moveSpeed);
-
- #ifndef DOS
- printf("Moving forward.\n");
- #endif
-
- break;
-
- case 'R':
- player.facingAngle = (player.facingAngle + 10) & ANGLE_MASK;
-
- #ifndef DOS
- printf("Rotating right.\n");
- #endif
-
- break;
-
- case 'F':
- player.facingAngle = (player.facingAngle - 10) & ANGLE_MASK;
-
- #ifndef DOS
- printf("Rotating left.\n");
- #endif
-
- break;
-
- case '.':
- ++moveSpeed;
- break;
-
- case ',':
- --moveSpeed;
- break;
-
- case 'P':
- bDisplayProjectionPoints = !bDisplayProjectionPoints;
- break;
-
- case 'B':
- bBlackAndWhite = !bBlackAndWhite;
-
- #ifndef DOS
- printf("Switching black&white toggle.\n");
- #endif
-
- break;
-
- case 'Q':
- goto QUIT;
- break;
- }
-
- }
-
-
- #ifdef DOS
- m_GetMousePos( &mouseX, &mouseY, &bButton1, &bButton2 );
-
- // Change their rotation based on X.
- player.facingAngle = (player.facingAngle - (lastX - mouseX)) & ANGLE_MASK;
-
- // Move them based on Y.
- player.xPos += W_UNFIX(SAFE_SIN(player.facingAngle) * (lastY-mouseY) );
- player.yPos += W_UNFIX(SAFE_COS(player.facingAngle) * (lastY-mouseY) );
-
- lastX = mouseX;
- lastY = mouseY;
-
- // If button 1 is down, move them forward.
- if( bButton1 )
- {
- player.xPos += W_UNFIX(SAFE_SIN(player.facingAngle) * moveSpeed);
- player.yPos += W_UNFIX(SAFE_COS(player.facingAngle) * moveSpeed);
- }
-
- // Put the mouse in the center if it's off the screen.
- if( mouseX >= (320*2-3) || mouseX == 0 || mouseY >= (200-3) || mouseY == 0 )
- {
- lastX = 320;
- lastY = 200/2;
-
- m_SetMousePos( 320, 200/2 );
- }
- #endif
-
- if( bFrontAndBack )
- {
- // Front.
- s_MinX = 0;
- s_MaxX = s_Width;
- s_MinY = 0;
- s_MaxY = s_Height/2 - 1;
-
- s_DrawWidth = s_MaxX - s_MinX;
- s_DrawHeight = s_MaxY - s_MinY;
-
- dr_DrawScreen();
- s_DrawRegion( s_MinX, s_MinY, s_MaxX, s_MaxY, s_MinX, s_MinY );
-
- // Back.
- player.facingAngle = (player.facingAngle + PI) & ANGLE_MASK;
-
- dr_DrawScreen();
- s_DrawRegion( s_MinX, s_MinY, s_MaxX, s_MaxY, s_MinX, s_Height / 2 + 1 );
-
- player.facingAngle = (player.facingAngle + PI) & ANGLE_MASK;
- }
- else
- {
- dr_DrawScreen();
-
- // If the screen is small, draw a border.
- if( s_DrawWidth != s_Width )
- {
- dr_DrawLine( s_MinX, s_MinY, s_MaxX, s_MinY, s_Width, s_Height, 30 );
- dr_DrawLine( s_MinX, s_MinY, s_MinX, s_MaxY, s_Width, s_Height, 30 );
- dr_DrawLine( s_MaxX, s_MinY, s_MaxX, s_MaxY, s_Width, s_Height, 30 );
- dr_DrawLine( s_MinX, s_MaxY, s_MaxX, s_MaxY, s_Width, s_Height, 30 );
- }
-
- if( bMessageOn )
- {
- sprintf( screenMessage, "FPS: %d W: %d H: %d", (WORD)((float)frames / ((float)timeCount/ 182.0F)), s_MaxX-s_MinX, s_MaxY-s_MinY );
- s_BlitString( s_MinX+5, s_MaxY-20, 35, screenMessage, TRUE );
-
- sprintf( screenMessage, "X: %d Y: %d A: %d", player.xPos, player.yPos, player.facingAngle );
- s_BlitString( s_MinX+5, s_MaxY-10, 35, screenMessage, TRUE );
- }
- }
-
- if( s_MaxX == s_Width )
- s_Draw();
- else
- s_DrawRegion( s_MinX-1, s_MinY-1, s_MaxX+1, s_MaxY+1, s_MinX, s_MinY );
-
- ++frames;
- }
-
-
- QUIT:;
-
- t_EndTimer();
-
- curLevel.pLines->UnAllocateElements();
- curLevel.pPoints->UnAllocateElements();
-
- delete curLevel.pLines;
- delete curLevel.pPoints;
-
- if( commandLine.bLoadDoomTextures )
- tx_UnloadTextures();
-
-
- s_Clear(0);
- s_Draw();
- s_UnInit(TRUE);
-
- printf( "FPS = %f", (float)frames / ((float)timeCount/60));
- printf("\n\n");
- }
-
-
-
-
- int mike_new_handler( size_t t )
- {
- char errorMessage[256];
-
- s_UnInit(TRUE);
-
- sprintf(errorMessage, "\n\nError allocating %d bytes!\n\n", t );
- puts(errorMessage);
-
- return 0;
- }
-
-
-
- void OnExit()
- {
- s_UnInit(FALSE);
- }
-
-
-